/**
 * 分页请求参数
 * @description 用于分页查询的请求参数
 */
export interface IPaginationRequest {
  /** 页码，从1开始 */
  page: number;
  /** 每页数量 */
  pageSize: number;
}

/**
 * 分页响应数据
 * @description 分页查询的响应数据结构
 */
export interface IPaginationResponse<T> {
  /** 数据列表 */
  list: T[];
  /** 总数量 */
  total: number;
  /** 当前页码 */
  page: number;
  /** 每页数量 */
  pageSize: number;
  /** 总页数 */
  totalPages: number;
  /** 是否有下一页 */
  hasNext: boolean;
  /** 是否有上一页 */
  hasPrev: boolean;
}

/**
 * 分页状态
 * @description 用于状态管理的分页状态
 */
export interface IPaginationState {
  /** 当前页码 */
  page: number;
  /** 每页数量 */
  pageSize: number;
  /** 总数量 */
  total: number;
  /** 是否还有更多数据 */
  hasMore: boolean;
  /** 是否正在加载 */
  loading: boolean;
}

/**
 * 分页配置
 * @description 分页组件的配置选项
 */
export interface IPaginationConfig {
  /** 默认页码 */
  defaultPage?: number;
  /** 默认每页数量 */
  defaultPageSize?: number;
  /** 每页数量选项 */
  pageSizeOptions?: number[];
  /** 是否显示每页数量选择器 */
  showSizeChanger?: boolean;
  /** 是否显示快速跳转 */
  showQuickJumper?: boolean;
  /** 是否显示总数 */
  showTotal?: boolean;
}

/**
 * 分页查询参数
 * @description 结合筛选条件的分页查询参数
 */
export interface IPaginatedQuery<T = Record<string, unknown>> extends IPaginationRequest {
  /** 筛选条件 */
  filters?: T;
  /** 搜索关键词 */
  keyword?: string;
  /** 排序字段 */
  sortBy?: string;
  /** 排序方向 */
  sortOrder?: 'asc' | 'desc';
}